package com.cangshi.service;

import com.cangshi.dao.TaskMapper;
import com.cangshi.dao.TaskTypeMapper;
import com.cangshi.entity.Task;
import com.cangshi.entity.TaskType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by 15c on 2017/4/3.
 */
@Service("TaskBean")
public class TaskServiceImpl implements TaskService {
    @Autowired
    TaskMapper taskMapper;

    @Autowired
    TaskTypeMapper taskTypeMapper;
    /**
     * 用户创建任务
     *
     * @param task 任务对象
     * @return
     */
    public int addTask(Task task) {
        return taskMapper.insertSelective(task);
    }

    /**
     * 查询上次访问TaskId
     * @return id
     */
    public int getLastTaskId() {
        return taskMapper.selectLastTaskId();
    }

    /**
     * 通过user_id查询用户发布的历史任务
     *
     * @param userId   用户id
     * @param pageSize 一页显示多少条数据
     * @param startPos 从哪条开始显示
     * @return
     */
    public List<Task> selectUserCreateHistoryTaskBYUserId(Integer startPos, Integer pageSize, Integer userId) {
        return taskMapper.selectTaskByUserId(startPos, pageSize, userId);
    }

    /**
     * 通过user_id查询一个用户所有的历史任务条数
     *
     * @param userId 用户id
     * @return
     */
    public int selectOneUserAllHistoryTask(Integer userId) {
        return taskMapper.selectHistoryTask(userId);
    }

    /**
     * 通过一个任务id查询一个任务的详情
     *
     * @param taskId 任务id
     * @return
     */
    public Task selectTaskDetails(Integer taskId) {
        return taskMapper.selectOneTaskOverallInfo(taskId);
    }

    /**
     * 通过任务id删除任务
     *
     * @param taskId 任务id
     * @return
     */
    public int deleteTask(Integer taskId) {
        return taskMapper.deleteByPrimaryKey(taskId);
    }

    /**
     * 查询所有任务类型
     * @return
     */

    public List<TaskType> selectAllType() {
        return taskTypeMapper.selectAllTaskType();
    }

    /**
     * 修改任务状态
     * @param taskId 任务Id
     * @param userId 用户Id
     * @param taskState 任务状态 （0——待完成,1——已完成,2——已过期）
     * @return
     */
    public int updateTaskState(Integer taskId,Integer userId,Integer taskState) {
        return taskMapper.updateTaskState(taskId, userId, taskState);
    }

    /**
     * 查询筛选出的任务总条数（此为用户未登录状态下的筛选）
     * @param minMoney
     * @param maxMoney
     * @param taskType
     * @param distance
     * @param latitude
     * @param longitude
     * @return
     */

    public int selectAllNumber(Double minMoney, Double maxMoney, Integer taskType, Integer distance,String keyword,Double latitude, Double longitude) {
        if(keyword!=null){
            keyword = "%"+keyword+"%";
        }
        return taskMapper.selectTaskByscreenAllNumber(minMoney, maxMoney, taskType, distance, keyword, latitude, longitude);
    }

    /**
     * 筛选任务（此为用户未登录状态下的筛选）
     * @param minMoney
     * @param maxMoney
     * @param taskType
     * @param distance
     * @param startPos
     * @param pageSize
     * @param latitude
     * @param longitude
     * @return
     */
    public List<Task> selectTaskByScreen(Double minMoney,Double maxMoney, Integer taskType, Integer distance,String keyword, Integer startPos, Integer pageSize, Double latitude, Double longitude) {
        if(keyword!=null){
            keyword = "%"+keyword+"%";
        }
        return taskMapper.selectTaskByscreen(minMoney, maxMoney, taskType, distance, keyword, startPos, pageSize, latitude, longitude);
    }

    /**
     * 查询用于主页显示的任务总条数
     * @return
     */

    public int selectHomePageTaskNum() {
        return taskMapper.selectTaskUsedForHomePageNum();
    }

    /**
     * 查询任务用于主页显示(分页显示)
     * @param startPos 开始位置
     * @param pageSize 一次查询多少个
     * @return
     */
    public List<Task> selectHomePageTask(Integer startPos, Integer pageSize) {
        return taskMapper.selectTaskUsedForHomePage(startPos, pageSize);
    }

    /**
     * 通过筛选查询任务总条数（此为用户登录状态下的筛选）
     * @return
     */


    public int selectTaskNumByLandUser(Double minMoney,
                                       Double maxMoney,
                                       Integer taskType,
                                       Integer distance,
                                       String keyword,
                                       Double latitude,
                                       Double longitude,
                                       Integer sex,
                                       Integer userAge) {
        if(keyword!=null){
            keyword = "%"+keyword+"%";
        }
        return taskMapper.selectTaskByscreenAllNumberLand(minMoney, maxMoney, taskType, distance, keyword, latitude, longitude, sex, userAge);
    }

    /**
     * 通过筛选查询任务（此为用户登录状态下的筛选）
     * @param minMoney
     * @param maxMoney
     * @param taskType
     * @param distance
     * @param keyword
     * @param startPos
     * @param pageSize
     * @param latitude
     * @param longitude
     * @param sex
     * @param userAge
     * @return
     */
    public List<Task> selectTaskByLandUser(Double minMoney,
                                           Double maxMoney,
                                           Integer taskType,
                                           Integer distance,
                                           String keyword,
                                           Integer startPos,
                                           Integer pageSize,
                                           Double latitude,
                                           Double longitude,
                                           Integer sex,
                                           Integer userAge) {
        if(keyword!=null){
            keyword = "%"+keyword+"%";
        }
        return taskMapper.selectTaskByscreenLand( minMoney, maxMoney, taskType, distance, keyword, startPos, pageSize, latitude, longitude, sex, userAge);
    }

    /**
     * 强制任务过期
     * @return  过期任务条数
     */
    public int setTaskOverdue() {
        return taskMapper.updateTaskStateOverdue();
    }
}
